home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / progwin.zip / POPMENU.ZIP / POPMENU.C next >
C/C++ Source or Header  |  1991-10-10  |  4KB  |  126 lines

  1. /*---------------------------------------
  2.   POPMENU.C -- Popup Menu Demonstration
  3.                (c) Charles Petzold, 1990
  4.   ---------------------------------------*/
  5.  
  6. #include <windows.h>
  7. #include "popmenu.h"
  8.  
  9. long FAR PASCAL WndProc (HWND, WORD, WORD, LONG);
  10.  
  11. char szAppName[] = "PopMenu";
  12. HANDLE hInst;
  13.  
  14. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  15.                    LPSTR lpszCmdLine, int nCmdShow)
  16. {
  17.   HWND hwnd;
  18.   MSG msg;
  19.   WNDCLASS wndclass;
  20.  
  21.   if (!hPrevInstance)
  22.   {
  23.     wndclass.style = CS_HREDRAW | CS_VREDRAW;
  24.     wndclass.lpfnWndProc = WndProc;
  25.     wndclass.cbClsExtra = 0;
  26.     wndclass.cbWndExtra = 0;
  27.     wndclass.hInstance = hInstance;
  28.     wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  29.     wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
  30.     wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);
  31.     wndclass.lpszMenuName = NULL;
  32.     wndclass.lpszClassName = szAppName;
  33.  
  34.     RegisterClass(&wndclass);
  35.   }
  36.  
  37.   hInst = hInstance;
  38.  
  39.   hwnd = CreateWindow(szAppName, "Popup Menu Demonstration",
  40.                       WS_OVERLAPPEDWINDOW,
  41.                       CW_USEDEFAULT, CW_USEDEFAULT,
  42.                       CW_USEDEFAULT, CW_USEDEFAULT,
  43.                       NULL, NULL, hInstance, NULL);
  44.  
  45.   ShowWindow(hwnd, nCmdShow);
  46.   UpdateWindow(hwnd);
  47.  
  48.   while(GetMessage(&msg, NULL, 0, 0))
  49.   {
  50.     TranslateMessage(&msg);
  51.     DispatchMessage(&msg);
  52.   }
  53.   return msg.wParam;
  54. }
  55.  
  56. long FAR PASCAL WndProc (HWND hwnd, WORD message, WORD wParam, LONG lParam)
  57. {
  58.   static HMENU hMenu;
  59.   static int wColorID[5] = {WHITE_BRUSH, LTGRAY_BRUSH, GRAY_BRUSH,
  60.                             DKGRAY_BRUSH, BLACK_BRUSH};
  61.   static WORD wSelection = IDM_WHITE;
  62.   POINT point;
  63.  
  64.   switch (message)
  65.   {
  66.     case WM_CREATE:
  67.       hMenu = LoadMenu(hInst, szAppName);
  68.       hMenu = GetSubMenu(hMenu,0);
  69.       return 0;
  70.  
  71.     case WM_RBUTTONDOWN:
  72.       point = MAKEPOINT(lParam);
  73.       ClientToScreen(hwnd,&point);
  74.       TrackPopupMenu(hMenu, 0, point.x, point.y, 0, hwnd, NULL);
  75.       return 0;
  76.  
  77.     case WM_COMMAND:
  78.       switch (wParam)
  79.       {
  80.         case IDM_NEW:
  81.         case IDM_OPEN:
  82.         case IDM_SAVE:
  83.         case IDM_SAVEAS:
  84.         case IDM_UNDO:
  85.         case IDM_CUT:
  86.         case IDM_COPY:
  87.         case IDM_PASTE:
  88.         case IDM_CLEAR:
  89.           MessageBeep(0);
  90.           return 0;
  91.  
  92.         case IDM_WHITE:       // Note: Logic below
  93.         case IDM_LTGRAY:      //   assumes that IDM_WHITE
  94.         case IDM_GRAY:        //   through IDM_BLACK are
  95.         case IDM_DKGRAY:      //   consecutive number in
  96.         case IDM_BLACK:       //   the order shown here.
  97.           CheckMenuItem(hMenu, wSelection, MF_UNCHECKED);
  98.           wSelection = wParam;
  99.           CheckMenuItem(hMenu, wSelection, MF_CHECKED);
  100.  
  101.           SetClassWord(hwnd, GCW_HBRBACKGROUND,
  102.           GetStockObject(wColorID[wParam - IDM_WHITE]));
  103.                     InvalidateRect(hwnd,NULL,TRUE); return 0;
  104.  
  105.         case IDM_ABOUT:
  106.           MessageBox(hwnd,"Popup Menu Demonstration Program.",
  107.                      szAppName,MB_ICONINFORMATION | MB_OK);
  108.           return 0;
  109.  
  110.         case IDM_EXIT:
  111.           SendMessage(hwnd,WM_CLOSE,0,0L);
  112.           return 0;
  113.  
  114.         case IDM_HELP:
  115.           MessageBox(hwnd,"Help not yet implemented.",
  116.                      szAppName,MB_ICONINFORMATION | MB_OK);
  117.           return 0;
  118.         }
  119.         break;
  120.       case WM_DESTROY:
  121.         PostQuitMessage(0);
  122.         return 0;
  123.       }
  124.     return DefWindowProc(hwnd,message,wParam,lParam);
  125.   }
  126.